﻿using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Threading;
using Controllers;
using Interfaces;

namespace Views.Moduler
{
    public partial class SøgAfdelinger : UserControl
    {
        #region Fields

        private readonly Controller _controller;
        private IAfdeling _selectedAfdeling;

        #endregion

        #region Creation

        public SøgAfdelinger(Controller controller)
        {
            InitializeComponent();
            _controller = controller;
            OpdaterSide();
        }

        #endregion

        #region Events

        private void LwAfdelinger_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var afdeling = (IAfdeling) LwAfdelinger.SelectedItem;
            _selectedAfdeling = afdeling;

            var lukketAfdeling = _controller.HentDefaultAfdeling();

            if (_selectedAfdeling == null || _selectedAfdeling.Navn == lukketAfdeling.Navn)
            {
                OpdaterSide();
                return;
            }

            AfdelingValgt();
        }

        private void BtnVisBruger_Click(object sender, RoutedEventArgs e)
        {
            var lukketAfdeling = _controller.HentDefaultAfdeling();

            //Hvis der ikke er valgt et afdelings objekt returner metoden
            if (_selectedAfdeling == null || _selectedAfdeling.Navn == lukketAfdeling.Navn) return;

            var afdelingsDetaljer = new AfdelingsDetaljer(_controller, _selectedAfdeling);
            afdelingsDetaljer.ShowDialog();
        }


        private void TxtSøgning_TextChanged(object sender, TextChangedEventArgs e)
        {
            //Søger efter afdelinger med det indtastede navn, hvor der kan skrives med store og små bogstaver
            LwAfdelinger.ItemsSource = _controller.HentAlleAfdelinger().Where(s => s.Navn.ToLower()
                                                                                    .Contains(TxtSøgning.Text.ToLower()))
                                                  .ToList();
        }

        private void SøgAfdelinger_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Escape)
                TxtSøgning.Clear();
            if (e.Key == Key.Enter)
                TxtSøgning.SelectAll();
        }

        #endregion

        #region Tilstandsstyring

        public void OpdaterSide()
        {
            LwAfdelinger.ItemsSource = null;
            BtnVisBruger.IsEnabled = false;
            TxtSøgning.Clear();
            Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => TxtSøgning.Focus()));
            OpdaterBrugereListView();
        }

        private void OpdaterBrugereListView()
        {
            LwAfdelinger.ItemsSource = _controller.HentAlleAfdelinger();
        }

        private void AfdelingValgt()
        {
            BtnVisBruger.IsEnabled = true;
        }

        #endregion
    }
}
